<template>
  <el-dialog
    title="机构选择"
    :close-on-click-modal="false"
    :visible.sync="visible"
    @close="clearDataList()"
    width="50vw"
    top="5vh"
    append-to-body
  >
    <el-container>
      <el-main style="height:70vh;overflow-x: hidden;">
        <el-row :gutter="20">
          <el-col :xs="24" :sm="24" :md="10">
            <div class="boxsty">
              <el-tree
                :data="treeData"
                :props="defaultProps"
                :filter-node-method="filterNode"
                class="filter-tree"
                node-key="id"
                highlight-current
                :default-expanded-keys="[1]"
                accordion
                @node-click="getNodeData"
              >
                <span class="custom-tree-node" slot-scope="{ node, data }">
                  <el-tooltip
                    class="item"
                    effect="dark"
                    content="无数据权限"
                    placement="right-start"
                    v-if="data.isLock"
                  >
                    <span>
                      {{ node.label }}
                      <i class="el-icon-lock"></i>
                    </span>
                  </el-tooltip>
                  <span v-if="!data.isLock">{{ node.label }}</span>
                </span>
              </el-tree>
            </div>
          </el-col>
          <el-col :xs="24" :sm="24" :md="7" v-if="showPrise">
            <div class="boxsty">
              <div class="flex titbottom">
                <el-input v-model="listQuery.name" placeholder="请输入搜索用户" style="margin-right:10px"></el-input>

                <el-button @click="btnSearch" type="primary" icon="el-icon-search" plain>搜索</el-button>
              </div>
              <div class="avue-crud">
                <el-table
                  @row-click="handleClick"
                  :data="tableDataDept"
                  v-loading="tableloading"
                  style="width: 100%"
                >
                  <el-table-column prop="username" label="用户" width="120"></el-table-column>
                  <el-table-column prop="ryName" label="姓名" min-width="150"></el-table-column>
                </el-table>
              </div>
              <div style="margin-top:20px">
                <el-pagination
                  @size-change="sizeChangeHandle"
                  @current-change="currentChangeHandle"
                  :current-page="page.currentPage"
                  :page-sizes="[10, 20, 50, 100]"
                  :page-size="page.pageSize"
                  :total="page.total"
                  background
                  layout="total, sizes, prev, pager, next"
                >
                  <!-- , jumper -->
                </el-pagination>
              </div>
            </div>
          </el-col>
          <el-col :xs="24" :sm="24" :md="14">
            <div class="boxsty" v-if="showRentPrise">
              <!-- 原来是叫【已选择人员】在合同创建受约人的地方不对，所以改成【已选择机构】-->
              <div class="tabletext titbottom">已选择机构</div>
              <div class="avue-crud">
                <el-table :data="tableDataUser" ref="ry-table" stripe>
                  <el-table-column prop="jigouName" label="机构名称" width="300"></el-table-column>
                  <el-table-column label="操作" width="100">
                    <template slot-scope="scope">
                      <el-button @click="delUserList(scope.$index)" type="danger" plain>删除</el-button>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </div>
          </el-col>
        </el-row>
      </el-main>
    </el-container>
    <span slot="footer" class="dialog-footer">
      <!-- <el-button type="primary" @click="exportExcel" style="float: left">导出已选人员</el-button> -->

      <el-button type="primary" v-if="canSubmit" @click="btnSave">确定</el-button>
      <el-button type="primary" plain @click="btnCancel">取消</el-button>
    </span>
  </el-dialog>
</template>

<script>
import store from "@/store";
import { fetchTree } from "@/api/admin/dept";
import { fetchList } from "@/api/admin/user";
import { fayuetree } from "@/api/hetongrenwu/hetongyeji/hetongnd";
import { shouyuetree } from "@/api/hetongrenwu/hetongyeji/hetongnd";
import {
  selHzBmList,
  savelist,
  removeByHzId
} from "@/api/ceping/cepinghzgldxpzb";
import { validatenull } from "@/util/validate";
import { getLdList } from "@/api/dailyExamine/eventExamine/event";
import { showJgTree,getKpiTreeAll } from "@/api/dailyExamine/targetExamine/createAssessment";
export default {
  data() {
    return {
      token: "",
      type: "",
      qjDeptId: "", //全局部门id
      qjGzId: "", //全局规则id
      tableloading: false, //table遮挡
      showPrise: true,
      showPrisehidden: true,
      showRentPrise: false,
      visible: false,
      canSubmit: false,
      tableDataDept: [],
      tableDataUser: [],
      dataForm: {},
      listQuery: {
        name: ""
      },
      treeData: [],
      jgtreeData: [],
      defaultProps: {
        children: "children",
        label: "name"
      },
      page: {
        total: 0, // 总页数
        currentPage: 1, // 当前页数
        pageSize: 20, // 每页显示多少条,
        isAsc: false // 是否倒序
      },
      searchForm: {},
      zdySearchForm: {},
      nodeKey: []
    };
  },
  created() {
    // this.getList();
  },
  methods: {
    init(id, type, jsonData) {
      this.token = store.getters.access_token;
      this.type = "jg";
      this.qjGzId = id;
      this.visible = true;
      this.canSubmit = true;
      this.getList();
      this.clearDataList();
      this.reloadTableDataUser(type, jsonData);
    },
    reloadTableDataUser(type, jsonData) {
      var jsonObj = JSON.parse(jsonData) || [];
      //console.log(JSON.parse(jsonData))
      for (var i = 0; i < jsonObj.length; i++) {
        let objUser = {};
        objUser["userId"] = jsonObj[i].userId;
        objUser["deptName"] = jsonObj[i].deptName;
        objUser["fayueName"] = jsonObj[i].userName;
        objUser["fayueZhiwu"] =
          jsonObj[i].userZw == null ? jsonObj[i].fayueZhiwu : jsonObj[i].userZw;
        objUser["shouyueName"] = jsonObj[i].userName;
        objUser["shouyueZhiwu"] =
          jsonObj[i].userZw == null ? jsonObj[i].fayueZhiwu : jsonObj[i].userZw;
        objUser["cyrName"] = jsonObj[i].userName;
        objUser["cyrydepartname"] =
          jsonObj[i].userZw == null ? jsonObj[i].fayueZhiwu : jsonObj[i].userZw;
        objUser["shrName"] = jsonObj[i].userName;
        objUser["shrZhiwu"] =
          jsonObj[i].userZw == null ? jsonObj[i].fayueZhiwu : jsonObj[i].userZw;
        objUser["userLx"] = jsonObj[i].userLx;
        objUser["userName"] = jsonObj[i].userName;
        if (this.type == "jg") {
          objUser["deptId"] = jsonObj[i].deptId;
        } else {
          objUser["deptId"] = jsonObj[i].deptId;
        }
        objUser["jigouName"] = jsonObj[i].jigouName;
        this.tableDataUser.push(objUser);
      }
    },
    //查询被测评对象
    loadTableDataUser(id) {
      selHzBmList(id)
        .then(data => {
          var obj = data.data.data;
          if (obj) {
            for (var i = 0; i < obj.length; i++) {
              this.tableDataUser.push({
                id: obj[i].id,
                hzId: obj[i].hzId,
                userId: obj[i].userId,
                userName: obj[i].userName,
                deptId: obj[i].deptId,
                deptName: obj[i].deptName,
                userZw: obj[i].userZw,
                userLx: obj[i].userLx,
                userDeptId: obj[i].userDeptId,
                userDeptName: obj[i].userDeptName,
                bhzPx: obj[i].bhzPx
              });
            }
          }
        })
        .catch(() => {
          this.$notify.closeAll();
          this.$notify.error("数据错误");
        });
    },
    getList() {
      //更改获取树结构的方法
        getKpiTreeAll().then(response => {

            if(response.data.data == "allTree"){
                fetchTree().then(res => {
                    this.treeData = res.data.data;
                });
            }else{
                this.treeData = this.resetTreeData(response.data.data, []);

            }
      /*fetchTree(this.listQuery).then(response => {*/
          console.log(response)
        //this.treeData = response.data.data;
        //重组只显示不带锁的
        //this.treeData = this.resetTreeData(response.data.data, []);
        if (this.type == "jg") {
          this.showPrise = false; // 机构人员隐藏
          this.showPrisehidden = false; // 右侧添加人隐藏
          this.showRentPrise = true; // 右侧添加机构显示
        } else if (["fy", "sy", "bkhr"].includes(this.type)) {
          this.showPrise = true; // 机构人员显示
          this.showPrisehidden = true; //右侧添加人显示
          this.showRentPrise = false; // 机构隐藏
        }
      });
      return false;
      //不明白下面为什么这么写，是不是有什么重要意义，所以先保留代码，不执行，现在获取组织机构树结构的接口换成系统自带的那个
      if (this.type == "fy") {
        fayuetree(this.listQuery).then(response => {
          this.treeData = response.data.data;
          //this.treeData=this.jiequ(this.treeData)
          this.treeData = response.data.data;
          this.showPrise = true; // 机构人员显示
          this.showPrisehidden = true; //右侧添加人显示
          this.showRentPrise = false; // 机构隐藏
        });
      } else if (this.type == "sy") {
        shouyuetree(this.listQuery).then(response => {
          this.treeData = response.data.data;
          this.showPrise = true; // 机构人员显示
          this.showPrisehidden = true; //右侧添加人显示
          this.showRentPrise = false; // 机构隐藏
        });
      } else if (this.type == "bkhr") {
        shouyuetree(this.listQuery).then(response => {
          this.treeData = response.data.data;
          this.showPrise = true; // 机构人员显示
          this.showPrisehidden = true; //右侧添加人显示
          this.showRentPrise = false; // 机构隐藏
        });
      }

      /*else if (this.type == "jg") {
          shouyuetree(this.listQuery).then(response => {
              this.treeData = response.data.data;
              this.showPrise = false; // 机构人员隐藏
              this.showPrisehidden = false; // 右侧添加人隐藏
              this.showRentPrise = true; // 右侧添加机构显示
          });
      }*/
        if (this.type == "cyr" || this.type == "shr" || this.type == "dfr") {
        //參與人
        fayuetree(this.listQuery).then(response => {
          this.treeData = response.data.data;
        });
      }
      if (this.type == "zxshr") {
        //专项审核
        fayuetree(this.listQuery).then(response => {
          this.treeData = response.data.data;
        });
      }
    },
    //重组树结构
    resetTreeData(arr, newArr) {
      arr.forEach(item => {
        if (item.isLock) {
          item.children.forEach(child => {
            if (child.isLock) {
              this.resetTreeData(item.children, newArr);
            } else {
              var obj = newArr.find(newItem => newItem.id == child.id);
              if (!obj) {
                newArr.push(child);
              }
            }
          });
        } else {
          const childArr = item.children.filter(child => child.isLock == false);
          item.children.forEach(child => {
            if (child.isLock) {
              this.resetTreeData(item.children, childArr);
            } else {
              var obj = childArr.find(newItem => newItem.id == child.id);
              if (!obj) {
                childArr.push(child);
              }
            }
          });
          item.children = childArr;
          var findObj = newArr.find(newItem => newItem.id == item.id);
          if (!findObj) {
            newArr.push(item);
          }
        }
      });
      return newArr;
    },
    jiequ(data) {
      const result = data.map(item => {
        const children = item.children.map(every => {
          return {
            id: every.id,
            parentId: every.parentId,
            name: every.name,
            deptName: every.deptName,
            deptCode: every.deptCode,
            isLock: every.isLock
          };
        });
        return {
          ...item,
          children: children
        };
      });
      return result;
    },
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
    getPersons(page, params) {
      this.tableloading = true;
      fetchList(
        Object.assign(
          {
            current: page.currentPage,
            size: page.pageSize
          },
          params,
          this.searchForm,
          this.zdySearchForm
        )
      )
        .then(response => {
          // this.list = response.data.data.records
          this.tableDataDept = response.data.data.records;
          this.page.total = response.data.data.total;
          this.tableloading = false;
          ////console.log(this.tableDataDept);
        })
        .catch(err => {
          this.tableloading = false;
        });
    },
    getNodeData(data) {
      if (this.type != "jg") {
        this.page.currentPage = 1;
        this.qjDeptId = data.id;
        this.getPersons(this.page, {
          deptId: data.id
        });
      } else {
        this.handleClick(data);
      }
    },
    // 获取被选中部门的人员信息
    getDeptUser(id) {
      // 根据id去查询并且返回信息
      // 在下面的方法中调用
    },
    //选人添加到右边的框
    handleClick(vm) {
      if (this.type == "jg") {
        for (var i = 0; i < this.tableDataUser.length; i++) {
          if (this.tableDataUser[i].deptId == vm.id) {
            return;
          }
        }
      }
      let objUser = {};
      objUser["hzId"] = this.qjGzId;
      objUser["userId"] = vm.userId;
      if (this.type == "fy") {
        objUser["fayueName"] = vm.ryName;
        objUser["fayueZhiwu"] = validatenull(vm.ryZw) ? "-" : vm.ryZw;
      } else if (this.type == "sy") {
        objUser["shouyueName"] = vm.ryName;
        objUser["ryZjmc"] = vm.ryZjmc;
        objUser["shouyueZhiwu"] = validatenull(vm.ryZw) ? "-" : vm.ryZw;
      } else if (this.type == "bkhr") {
        objUser["beikaoheName"] = vm.ryName;
        objUser["beikaoheZhiwu"] = validatenull(vm.ryZw) ? "-" : vm.ryZw;
      }
      if (this.type == "jg") {
        objUser["jigouName"] = vm.name;
        objUser["userName"] = vm.name;
        objUser["deptId"] = vm.id;
      } else {
        objUser["userName"] = vm.ryName;
        objUser["deptId"] = vm.deptId;
      }
      if (this.type == "cyr") {
        objUser["cyrName"] = vm.ryName;
        objUser["cyrydepartname"] = validatenull(vm.ryZw) ? "-" : vm.ryZw;
      }
      if (this.type == "zxshr") {
        objUser["shrName"] = vm.ryName;
        objUser["shrZhiwu"] = validatenull(vm.ryZw) ? "-" : vm.ryZw;
      }
      objUser["userName"] = vm.ryName;
      objUser["deptName"] = vm.deptName;
      objUser["userZw"] = validatenull(vm.ryZw) ? "-" : vm.ryZw;
      objUser["type"] = this.type;
      objUser["userLx"] = "个人";
      //console.log(objUser)
      // 查询当前部门是否有日常考核联络员
      getLdList({ deptIds: objUser.deptId })
        .then(r => {
          if (r.data.code == 0) {
            objUser.userName = r.data.data[0].realName;
            objUser.userId = r.data.data[0].userId;
            objUser.userCode = r.data.data[0].userName;
            this.tableDataUser.unshift(objUser);
          }
        })
        .catch(err => {});
      //console.log(this.tableDataUser)
    },
    //删除人员list
    delUserList(index) {
      this.tableDataUser.splice(index, 1);
    },
    //清空记录
    clearDataList() {
      this.qjDeptId = "";
      this.tableDataDept = [];
      this.tableDataUser = [];
    },
    //保存人员
    btnSave() {
      this.canSubmit = false;
      this.visible = false;
      var params = {
        tableDataUser: this.tableDataUser,
        type: this.type
      };
      this.$emit("submitfy", params);
      //this.tableDataUser;
    },
    // tree搜索事件,搜索人
    btnSearch() {
      let param = {
        deptId: this.qjDeptId
      };

      if (this.listQuery.name.trim() !== "") {
        param["username"] = this.listQuery.name.trim();
        param["ryName"] = this.listQuery.name.trim();
      }
      this.getPageUsers(param);
    },
    // 分页
    // 每页数
    sizeChangeHandle(val) {
      this.page.pageSize = val;
      this.page.currentPage = 1;
      this.getPageUsers();
    },
    // 当前页
    currentChangeHandle(val) {
      this.page.currentPage = val;
      this.getPageUsers();
    },
    //分页刷新
    getPageUsers(vm) {
      if (vm) {
        this.getPersons(this.page, vm);
      } else {
        this.getPersons(this.page, {
          deptId: this.qjDeptId
        });
      }
    },
    //取消按钮
    btnCancel() {
      this.visible = false;
      this.clearDataList();
    },
    /**
     * excel 导出
     */
    exportExcel() {
      try {
        // 导出
        require.ensure([], () => {
          const { export_json_to_excel } = require("@/util/Export2Excel");
          const tHeader = "用户,姓名,部门".split(",");
          const filterVal = "xsUserName,ryName,deptName".split(",");
          const list = this.tableDataUser.map(column =>
            filterVal.map(header => {
              return column[header];
            })
          );
          export_json_to_excel(tHeader, list, "已选人员名单");
        });
      } catch (e) {
        if (typeof console !== "undefined") console.error(e);
      }
    },
    //判空
    validatenull(val) {
      return validatenull(val);
    }
  }
};
</script>

<style scoped>
</style>
